package com.isoft.mapper;

import com.isoft.entity.DfoeDfdeEntity;
import org.apache.ibatis.annotations.*;
import org.apache.ibatis.annotations.Param;

/**
 * DfoeDfdeMapper.java  --程文静
 * 航班异常相关数据库操作的 MyBatis 映射接口。
 * 负责插入消息元数据、航班基础信息、航班异常等操作。
 */
@Mapper
/**
 * 航班异常相关数据库操作接口。
 */
public interface DfoeDfdeMapper {
    /**
     * 插入消息元数据。
     * @param entity 消息元数据实体
     */
    @Insert("INSERT INTO MSG_META(SENDER, RECEIVER, SEQUENCE_NUMBER, DATE_TIME, MSG_TYPE, SUB_TYPE) VALUES(#{entity.meta.sender,jdbcType=VARCHAR}, #{entity.meta.receiver,jdbcType=VARCHAR}, #{entity.meta.sequenceNumber,jdbcType=NUMERIC}, TO_TIMESTAMP(#{entity.meta.dateTime,jdbcType=VARCHAR}, 'YYYYMMDDHH24MISS'), #{entity.meta.type,jdbcType=VARCHAR}, #{entity.meta.subType,jdbcType=VARCHAR})")
    @Options(useGeneratedKeys = true, keyProperty = "entity.meta.msgId")
    void insertMeta(@Param("entity") DfoeDfdeEntity entity);

    /**
     * 插入航班基础信息（如不存在则插入）。
     * @param entity 航班实体
     * @return 插入结果
     */
    @Insert("MERGE INTO FLIGHT_BASE t USING (SELECT #{dflt.flightId,jdbcType=NUMERIC} AS FLIGHT_ID, #{dflt.flightFileId,jdbcType=VARCHAR} AS FLIGHT_FILE_ID, #{dflt.flightIdentifier,jdbcType=VARCHAR} AS FLIGHT_IDENTIFIER FROM dual) s ON (t.FLIGHT_ID = s.FLIGHT_ID) WHEN NOT MATCHED THEN INSERT (FLIGHT_ID, FLIGHT_FILE_ID, FLIGHT_IDENTIFIER) VALUES (s.FLIGHT_ID, s.FLIGHT_FILE_ID, s.FLIGHT_IDENTIFIER)")
    int insertFlightBase(DfoeDfdeEntity entity);

    /**
     * 统计航班异常数量。
     * @param flightId 航班ID
     * @return 异常数量
     */
    @Select("SELECT COUNT(*) FROM FLIGHT_IRREGULARITY WHERE FLIGHT_ID = #{flightId}")
    int countFlightIrregularity(@Param("flightId") Long flightId);

    /**
     * 更新航班异常状态。
     * @param entity 航班实体
     * @return 更新结果
     */
    @Update("UPDATE FLIGHT_IRREGULARITY SET ABNORMAL_STATUS = 'ALTERNATE' WHERE FLIGHT_ID = #{dflt.flightId}")
    int updateFlightIrregularity(DfoeDfdeEntity entity);

    /**
     * 插入航班异常信息。
     * @param entity 航班实体
     * @return 插入结果
     */
    @Insert("INSERT INTO FLIGHT_IRREGULARITY(" +
            "FLIGHT_ID, ABNORMAL_STATUS) " +
            "VALUES(" +
            "#{dflt.flightId,jdbcType=NUMERIC}, " +
            "'ALTERNATE')")
    int insertFlightIrregularity(DfoeDfdeEntity entity);
}